<?php

// В kermel.php
function Version()
{
	return "0.2";
}

// 0.3 Заюзать для глобальных варс ини-файл

// ==== СИСТЕМНЫЕ ПЕРЕМЕННЫЕ ====
//
define("Root", "");

// ==== CТРУКТУРНЫЕ ПЕРЕМЕННЫЕ ====
define("Things", "Things");
define("Data", "Data");
define("Shared","Data/Shared");

// ==== ПЕРЕМЕННЫЕ ВРЕМЕНИ ВЫПОЛОНЕНИЯ ====
define("UseUserErrorProcessor", false); // Использовать пользовательский обработчик ошибок systemRaise()
define("Debug", true);

// Подключения функциональности ядра
// include_once("System/Kernel.php");

// В 0.3 вынести в Simple::Engine namespace или в файл ядра, который подключать здесь (include_once("System/kernel.php");)
function IsPostBackFrom($formID)
{
	/*
	dmp($_POST);
	dmp($formID);
	dmp($_POST["@PostBackForm"]);
	*/
	return @($_POST["@PostBackForm"] == $formID);
}

// В 0.3 вынести в kernel.php
function d($var)
{
	var_dump($var);
}

die(d($_GET));

/*
class ArrayToObject {
     private $data = array();
     public function __construct($data) {
          $this->data = $data;
     }
     public function __set($name, $value) {
          $this->data[$name] = $value;
     }
     public function __get($name) {
          if (isset($this->data[$name])) {
               return $this->data[$name];
          }
     }
     public function __toString() {
          $result = "";
          foreach ($this->data as $key => $value) {
               $result .= "$key = $value<br>";
          }
          return $result;
     }
}*/

// 0.4 Самодокументацию /// (добавить автозамену в notepad++)
// Принцип CheckTable в документацию
// Итем лист должен заниматься лишь выводом инфы, неважно откуда. За огранизацию инфы в базе д отвечать Simple_TreeCatalog
// В v0.3 изменить структуру для страниц на принцип MVC (???)
// Сделать ченить с установкой отображения UILayout (see "blacks" in Simple_Layout)
// Списки принимаемых аттрибутов для things, например: First {DataID}, Second {DataID, DataTable, DataField} . В __PreRender() проверка if (AttributesCollectionIndex == 'Second') ...
// Simple_Xml из статического класса в динамический. Будет оберткой для DOM с некоторыми доп функциями
// ВАЖНО! Все ui, использующие подключаемый javascript, помимо Simple_Javascript.js, должны содержать <simple:Javascript />. Вообще это надо исправить, чтобы <simple:Javascript /> определялся только в мастер-странице
// Безопасность пока на нулевом уровне. Сделать проверку сешнАйДи, уйти от CurrentRole() к <Roles> в UI. А CurrentRole() заменить на UserInRoles()
// ВАЖНО! В v0.3 кеширование страниц (глаголов pages), явно не указанных как некешируемых. Возможность указания некешируемых областей в пределах одной страницы. Кеширование использует Render() в файл, API реализует функцию Simple_Engine::DropCache($page)
// ВАЖНО! В v0.3 Simple_ItemList использует таблицы Catalog, Simple_Fields и Simple_FieldTypes. В Simple_Items хранятся данные, в Simple_Fields поля всех таблиц с указанием их типов и активности, в Simple_FieldTypes — справочник типов полей.
// ВАЖНО! Последоватеность выбора страницы для рендера: нулевой элемент пути, затем значение аттрибута DefaultPage thing-элемента, затем Simple_Layout::$DefaultPage
// Сделать метод Simple_Layout::GetAttributes(), возвращающий объект LayoutAttributes, хранящий информацию, извлеченную из атрибутов корневого элемента (например, page или thing).
// ВАЖНО! Все thing-элементы, реализующие IRenderable, должны заключать возврат функции __PreRender() в <div> либо <span>. Элементы, использующие не прямой вывод в функции __PreRender, а пререндер UI, могут использовать аттрибут Render="block|inline" тега thing (по-умолчанию Render="block").DONE.
// Все параметры функций дб начинаться с строчной буквы, а не с заглавной. 
// Аналогично с булевыми значениями
// Элемент Grid, обеспечивающий более высокий уровень абстрагирования, чем Repeat
// В TextBlocks вносить адрес страницы, где создается текстовый блок. Потом можно использовать при информировании о редактировании
// ВАЖНО! В именах полей в таблицах не должен присутствовать символ "_", т.к. он используется для обозначения типов элементов массивов PreRenderParams, например, см. Simple_ItemList::Show.
// Сделать TreeRecursive
// IF-блоки в UI. Первоначальная задача — использовать для вывода содержимого, зависящего от ролей, но лучше для этого использовать компонент из серии Login
// Посмотреть Dojo как вариант JavaScript-фрэймворка вместо jQuery. Но вряд ли.

// Организация автоматической загрузки модулей
// В 0.3 вынести в kernel.php
function __autoload($ClassName)
{
	include_once("Things/$ClassName/$ClassName.thing");
}

// Установка локалей
// В 0.3 вынести в kernel.php
setLocale(LC_ALL, 'ru_RU.UTF-8');

// Активация сессий
// В 0.3 вынести в kernel.php
session_start();

$globalTimer = new Simple_Timer();

// Загрузка интерфейсов
Simple_Engine::UsesInterface("IRenderable");

// Регистрация обработчика ошибок PHP
// В 0.3 вынести в kernel.php
function systemRaise($errorCode, $errorMessage, $errorFile, $errorLine, $vars)
{
	Simple_Warning::SystemRaise($errorCode, $errorMessage, $errorFile, $errorLine, $vars);
}
if (Debug)
{
	if (UseUserErrorProcessor)
	{
		set_error_handler("systemRaise"); 
	}
}
else
{
	error_reporting(0);
}

// Установка начальной страницы
Simple_Layout::$DefaultPage = "Hello";

// Рендер в браузер
Simple_Layout::Render("Mojo");

// Высвобождение ресурсов
Simple_Engine::Dispose();

// Рендер в файловую структуру
/*
foreach (Simple_Engine::GetUrlParam() as $urlParam) $s .= "/$urlParam";
$s .= ".html";
Simple_Layout::Render("Mojo", "Dump$s");
*/


// Упаковка php
/*
foreach (Simple_Engine::GetThingsList() as $thing)
{
	$src = "Things/$thing/$thing.thing";
	$dest = "Packed/Things/$thing/$thing.thing";
	if (is_file($src))
	{
		Simple_Engine::PackPhp($src, $dest);	
	}
}
*/

if (Debug) echo '<small style="padding-left:70px;">'.$globalTimer->Stop().'</small>';

?>